/**
 * @file teacher.js
 * @description 教师管理API接口
 * @created 2024-05-10
 */

import request from '@/utils/request'

// 基础路径
const baseUrl = '/api/admin/teacher'

/**
 * 获取教师列表
 * @param {Object} params - 查询参数
 * @returns {Promise} 教师列表
 */
export function getTeacherList(params) {
  console.log('请求教师列表参数:', params)
  
  // 设置更大的页面大小，确保获取所有教师数据
  const queryParams = {
    limit: 1000,  // 获取更多教师数据
    ...params
  };
  
  return request({
    url: `${baseUrl}/list/`,
    method: 'get',
    params: queryParams
  }).then(response => {
    // 增加更详细的调试日志
    console.log('==== 教师列表API原始响应 ====')
    console.log('响应状态:', response.status)
    console.log('响应消息:', response.message)
    
    // 检查数据结构
    if (response.data && response.data.teachers) {
      console.log(`获取到 ${response.data.teachers.length} 位教师数据`);
      
      // 输出所有可能的字段名
      if (response.data.teachers.length > 0) {
        const firstTeacher = response.data.teachers[0]
        console.log('==== 教师对象字段列表 ====')
        Object.keys(firstTeacher).sort().forEach(key => {
          console.log(`- ${key}: ${typeof firstTeacher[key]} = ${JSON.stringify(firstTeacher[key])}`)
        })
        
        // 特别检查系部相关字段
        console.log('==== 系部字段检查 ====')
        const deptFields = ['department', 'dept', 'teacherDept', 'teacher_dept']
        deptFields.forEach(field => {
          if (firstTeacher.hasOwnProperty(field)) {
            console.log(`- 存在字段 "${field}": ${JSON.stringify(firstTeacher[field])}`)
          } else {
            console.log(`- 不存在字段 "${field}"`)
          }
        })
        
        // 检查学院字段
        console.log('==== 学院字段检查 ====')
        const collegeFields = ['college_id', 'college_name', 'collegeId', 'collegeName']
        collegeFields.forEach(field => {
          if (firstTeacher.hasOwnProperty(field)) {
            console.log(`- 存在字段 "${field}": ${JSON.stringify(firstTeacher[field])}`)
          } else {
            console.log(`- 不存在字段 "${field}"`)
          }
        })
        
        // 打印教师信息统计
        console.log('==== 教师学院分布 ====')
        const collegeStats = {}
        response.data.teachers.forEach(teacher => {
          const collegeId = teacher.college_id
          const collegeName = teacher.college_name || '未知学院'
          
          if (!collegeStats[collegeId]) {
            collegeStats[collegeId] = {
              name: collegeName,
              count: 0
            }
          }
          collegeStats[collegeId].count++
        })
        
        // 打印学院统计
        Object.entries(collegeStats).forEach(([id, data]) => {
          console.log(`学院ID: ${id}, 名称: ${data.name}, 教师数量: ${data.count}`)
        })
      }
    } else {
      console.error('API返回数据格式有误:', response)
    }
    
    return response
  })
}

/**
 * 获取教师详情
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 教师详情
 */
export function getTeacherDetail(teacherId) {
  return request({
    url: `${baseUrl}/detail/${teacherId}/`,
    method: 'get'
  })
}

/**
 * 添加教师
 * @param {Object} data - 教师信息
 * @returns {Promise} 添加结果
 */
export function addTeacher(data) {
  return request({
    url: `${baseUrl}/add/`,
    method: 'post',
    data
  })
}

/**
 * 更新教师信息
 * @param {string} teacherId - 教师ID
 * @param {Object} data - 教师信息
 * @returns {Promise} 更新结果
 */
export function updateTeacher(teacherId, data) {
  return request({
    url: `${baseUrl}/update/${teacherId}/`,
    method: 'put',
    data
  })
}

/**
 * 删除教师
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 删除结果
 */
export function deleteTeacher(teacherId) {
  return request({
    url: `${baseUrl}/delete/${teacherId}/`,
    method: 'delete'
  })
}

/**
 * 批量删除教师
 * @param {Array} teacherIds - 教师ID数组
 * @returns {Promise} 删除结果
 */
export function batchDeleteTeachers(teacherIds) {
  return request({
    url: `${baseUrl}/batch-delete/`,
    method: 'post',
    data: { teacher_ids: teacherIds }
  })
}

/**
 * 导入教师数据
 * @param {FormData} formData - 包含教师Excel文件的FormData
 * @returns {Promise} 导入结果
 */
export function importTeachers(formData) {
  return request({
    url: `${baseUrl}/import/`,
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 导出教师数据
 * @param {Object} params - 查询参数，用于筛选要导出的教师
 * @returns {Promise} 导出结果，返回下载链接
 */
export function exportTeachers(params) {
  return request({
    url: `${baseUrl}/export/`,
    method: 'get',
    params,
    responseType: 'blob'
  })
}

/**
 * 获取教师所授课程列表 (新)
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 教师课程列表
 */
export function getTeacherCoursesTaught(teacherId) {
  return request({
    url: `/api/admin/teachers/${teacherId}/courses-taught/`,
    method: 'get'
  });
}

/**
 * 获取教师特定课程的授课班级列表 (新)
 * @param {string} teacherId - 教师ID
 * @param {string} courseId - 课程ID
 * @returns {Promise} 班级列表
 */
export function getTeacherCourseClassesTaught(teacherId, courseId) {
  return request({
    url: `/api/admin/teachers/${teacherId}/courses/${courseId}/classes-taught/`,
    method: 'get'
  });
}

/**
 * 获取班级学生成绩 (新 - 适用于特定教师、课程、班级组合)
 * @param {string} teacherId - 教师ID
 * @param {string} courseId - 课程ID
 * @param {string} classId - 班级ID
 * @returns {Promise} 学生成绩列表
 */
export function getClassCourseStudentScores(teacherId, courseId, classId) {
  return request({
    url: `/api/admin/teachers/${teacherId}/courses/${courseId}/classes/${classId}/student-scores/`,
    method: 'get'
  });
}

/**
 * 获取所有学院列表
 * @returns {Promise} 学院列表
 */
export function getCollegeList() {
  return request({
    url: '/api/colleges/',
    method: 'get'
  })
}

/**
 * 获取学院下属系/部门列表
 * @param {string} collegeId - 学院ID
 * @returns {Promise} 系/部门列表
 */
export function getDepartmentsByCollege(collegeId) {
  return request({
    url: `/api/colleges/${collegeId}/departments/`,
    method: 'get'
  })
}

/**
 * 获取系/部门下的课程列表
 * @param {string} departmentId - 系/部门ID
 * @returns {Promise} 课程列表
 */
export function getCoursesByDepartment(departmentId) {
  return request({
    url: `/api/departments/${departmentId}/courses/`,
    method: 'get'
  })
}

/**
 * 为教师分配课程
 * @param {string} teacherId - 教师ID
 * @param {Array} courseIds - 课程ID数组
 * @returns {Promise} 分配结果
 */
export function assignCoursesToTeacher(teacherId, courseIds) {
  return request({
    url: `/api/admin/teachers/${teacherId}/assign-courses/`,
    method: 'post',
    data: { course_ids: courseIds }
  })
}

/**
 * 获取系/部门下的班级列表
 * @param {string} departmentId - 系/部门ID
 * @returns {Promise} 班级列表
 */
export function getClassesByDepartment(departmentId) {
  return request({
    url: `/api/departments/${departmentId}/classes/`,
    method: 'get'
  })
}

/**
 * 为课程分配班级
 * @param {string} courseId - 课程ID
 * @param {Array} classIds - 班级ID数组
 * @returns {Promise} 分配结果
 */
export function assignClassesToCourse(courseId, classIds) {
  return request({
    url: `/api/admin/courses/${courseId}/assign-classes/`,
    method: 'post',
    data: { class_ids: classIds }
  })
} 